Generally, a programmable logic device (PLD) is an electronic component used to build reconfigurable digital circuits. Unlike a logic gate or logic circuit, which generally has a fixed function, a PLD traditionally has an undefined function at the time of manufacture. Often, before the PLD can be used in a circuit it must be programmed, that is, reconfigured to perform a desired function.
Traditionally a PLD may include a combination of a logic device and a memory device. Generally, the memory is used to store a pattern that was given to the chip during programming. Most of the methods for storing data in an integrated circuit have been adapted for use in PLDs. These generally include silicon anti-fuses, static random access memory (SRAM), erasable programmable read only memory (EPROM), electronically EPROM (EEPROM), non-volatile RAM, etc. In general, most PLDs include components that are programmed by applying an unusual level of voltage across a modified area of silicon inside the chip. This high level of voltage breaks or sets (depending on the technology) electrical connections and changes the layout of the electrical circuit.
One of the most common types of PLDs is a field-programmable gate array (FPGA). A FPGA is an integrated circuit designed to be configured by a customer or a designer after manufacturing—hence “field-programmable”. The FPGA configuration is generally specified using a hardware description language (HDL), similar to that used for an application-specific integrated circuit (ASIC).
FPGAs include an array of programmable logic blocks, and a hierarchy of reconfigurable interconnects that allow the blocks to be “wired together”. A FPGA's logic blocks can be configured to perform complex combinational functions, or merely simple logic gates like AND, XOR, etc.